"""
大模型评分prompt模板
统一所有股票分析维度的评分逻辑，移除硬编码评分
"""

# 技术分析评分prompt
TECHNICAL_SCORING_PROMPT = """
你是一个专业的股票技术分析师。请基于以下技术指标数据，给出0-10分的综合技术面评分。

技术指标数据：
{technical_data}

评分标准（0-10分）：
- 10分：技术面完美，多重指标共振向上，强烈看好
- 8-9分：技术面良好，主要指标表现积极
- 6-7分：技术面平稳，指标表现正常
- 4-5分：技术面一般，存在一定分歧
- 2-3分：技术面较弱，指标表现消极
- 0-1分：技术面极差，多重看跌信号

请严格按照以下JSON格式输出：
{{
    "score": 0-10之间的整数,
    "reasoning": "详细的评分理由，包括各指标的分析",
    "confidence": 0.0-1.0之间的浮点数
}}

注意：评分必须是0-10之间的整数，不能有小数。
"""

# 新闻分析评分prompt
NEWS_SCORING_PROMPT = """
你是一个专业的股票消息面分析师。请基于以下新闻和消息数据，给出0-10分的综合消息面评分。

消息面数据：
{news_data}

评分标准（0-10分）：
- 10分：消息面极佳，重大利好频现，市场高度认可
- 8-9分：消息面良好，积极信号明显
- 6-7分：消息面平稳，无重大负面消息
- 4-5分：消息面一般，存在一定不确定性
- 2-3分：消息面较差，负面消息较多
- 0-1分：消息面极差，重大利空频现

请严格按照以下JSON格式输出：
{{
    "score": 0-10之间的整数,
    "reasoning": "详细的评分理由，包括情感分析和市场热度",
    "confidence": 0.0-1.0之间的浮点数
}}

注意：评分必须是0-10之间的整数，不能有小数。
"""

# 估值分析评分prompt
VALUATION_SCORING_PROMPT = """
你是一个专业的股票估值分析师。请基于以下估值数据，给出0-10分的综合估值面评分。

估值数据：
{valuation_data}

评分标准（0-10分）：
- 10分：估值极度低估，安全边际巨大，强烈推荐
- 8-9分：估值显著低估，具备较好投资价值
- 6-7分：估值基本合理，投资价值一般
- 4-5分：估值偏高，投资风险增加
- 2-3分：估值显著高估，投资风险较大
- 0-1分：估值极度高估，强烈建议回避

请严格按照以下JSON格式输出：
{{
    "score": 0-10之间的整数,
    "reasoning": "详细的评分理由，包括各估值指标的分析",
    "confidence": 0.0-1.0之间的浮点数
}}

注意：评分必须是0-10之间的整数，不能有小数。
"""

# 基本面分析评分prompt
FUNDAMENTAL_SCORING_PROMPT = """
你是一个专业的股票财务分析师。请基于以下财务数据，给出0-10分的综合财务面评分。

财务数据：
{fundamental_data}

评分标准（0-10分）：
- 10分：财务状况完美，盈利优秀，偿债能力强，成长性佳
- 8-9分：财务状况良好，各项指标健康
- 6-7分：财务状况一般，基本满足投资要求
- 4-5分：财务状况较弱，存在一定财务风险
- 2-3分：财务状况较差，多项指标不佳
- 0-1分：财务状况极差，存在重大财务问题

请严格按照以下JSON格式输出：
{{
    "score": 0-10之间的整数,
    "reasoning": "详细的评分理由，包括盈利能力、偿债能力、运营效率等分析",
    "confidence": 0.0-1.0之间的浮点数
}}

注意：评分必须是0-10之间的整数，不能有小数。
"""

# 资金流向分析评分prompt
CAPITAL_SCORING_PROMPT = """
你是一个专业的股票资金流向分析师。请基于以下资金流向数据，给出0-10分的综合资金面评分。

资金流向数据：
{capital_data}

评分标准（0-10分）：
- 10分：资金面极佳，主力和散户资金齐聚，成交活跃
- 8-9分：资金面良好，主力资金积极，市场认可度高
- 6-7分：资金面平稳，资金流动正常
- 4-5分：资金面一般，存在一定资金分歧
- 2-3分：资金面较弱，资金有流出迹象
- 0-1分：资金面极差，大量资金撤离，市场冷清

请严格按照以下JSON格式输出：
{{
    "score": 0-10之间的整数,
    "reasoning": "详细的评分理由，包括主力资金、散户资金、成交量等分析",
    "confidence": 0.0-1.0之间的浮点数
}}

注意：评分必须是0-10之间的整数，不能有小数。
"""

# 统一的评分验证函数
def validate_score(score: int, dimension: str) -> int:
    """
    验证评分是否在有效范围内
    
    Args:
        score: 原始评分
        dimension: 分析维度名称
        
    Returns:
        验证后的评分（0-10之间）
    """
    if not isinstance(score, (int, float)):
        raise ValueError(f"{dimension}评分必须是数字")
    
    validated_score = int(round(score))
    
    if validated_score < 0:
        print(f"警告: {dimension}评分{score}低于0，调整为0")
        return 0
    elif validated_score > 10:
        print(f"警告: {dimension}评分{score}高于10，调整为10")
        return 10
    else:
        return validated_score

# 统一的评分结果类
class ScoringResult:
    """评分结果类"""
    
    def __init__(self, score: int, reasoning: str, confidence: float, dimension: str):
        self.score = validate_score(score, dimension)
        self.reasoning = reasoning
        self.confidence = max(0.0, min(1.0, confidence))
        self.dimension = dimension
    
    def to_dict(self) -> dict:
        """转换为字典格式"""
        return {
            "score": self.score,
            "reasoning": self.reasoning,
            "confidence": self.confidence,
            "dimension": self.dimension
        }